package Top101K;

import java.math.BigInteger;

/**
 * @Author quan
 * @Description 大数加法
 * @Date 2023/10/27 10:04
 */
public class BM86_BigNumAdd {
    public static void main(String[] args) {
        String s1 = "9994";
        String s2 = "9";
        String res = solve(s1,s2);
        System.out.println(res);
    }

    /**
     * 使用普通方法求解
     * @param str1 字符串1
     * @param str2 字符串2
     * @return
     */
    public static String solve (String str1, String str2) {
        //1-先取出两个字符串的最后一位，将字符形式转为整型
        long num1 = 0;
        long num2 = 0;
        long num = 0;
        int add = 0;
        String maxStr = "";
        String minStr = "";
        int max = Math.max(str1.length(),str2.length());
        int min = Math.min(str1.length(),str2.length());
        if(str1.length() > str2.length()){
            maxStr = str1;
            minStr = str2;
        }else{
            maxStr = str2;
            minStr = str1;
        }
        int dic = max - min;
        // System.out.println(dic + "======");
        int flag = minStr.length() - 1;
        StringBuffer sb = new StringBuffer();
        if(str1.length()>100000 || str2.length() > 100000){
            return null;
        }
        while (flag >= 0) {
            num1 = maxStr.charAt(flag + dic) - '0';
            num2 = minStr.charAt(flag) - '0';
            num = num1 + num2 + add;
            if (num >= 10) {
                num = num % 10;
                add = 1;
            } else {
                add = 0;
            }
            sb.append(num);
            System.out.println(num+"---");
            flag--;
        }
        //将剩下的字符直接添加到容器里面
        /**
         * 处理剩余元素的时候出了一些问题
         */
        for (int i = dic - 1; i >= 0; i--) {
            num = maxStr.charAt(i) - '0' +add;
            if(num >=10){
                num = num % 10;
                add = 1;
            }
            sb.append(num);
        }
        //看是否需要进位
        if(add == 1){
            sb.append(add);
        }
        return sb.reverse().toString();

        //2-定义一个变量，表示两者的进位值，如果相加大于10，变量值置为1；
        //3-下次相加的时候，是三个值相加
        //4-最后将数字转为字符串
    }


    /**
     * 计算两个数之和：使用内置函数
     * @param str1 string字符串 表示第一个整数
     * @param str2 string字符串 表示第二个整数
     * @return string字符串
     */
//    public String solve (String s, String t) {
//        //数字转为字符串
//        //1-String.valueOf(num)
//        //2-Integer.toString(num)
//        //3-字符串拼接
//        //字符串转数字
//        //1-Integer.parseInt(str)或者是Integer.valueOf(str)
//        //2-比较大的数字就是 下面这种方式
//        BigInteger b1 = new BigInteger(s);
//        BigInteger b2 = new BigInteger(t);
//        //大数相加
//        return b1.add(b2).toString();
//
//    }
}
